{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " Copyright (C)                                                       \n",
    " 2016 - 2019 Pinard Liu(liujianping-ok@163.com) \n",
    " \n",
    " https://www.cnblogs.com/pinard\n",
    " \n",
    " Permission given to modify the code as long as you keep this declaration at the top                               \n",
    "\n",
    "用scikit-learn和pandas学习Ridge回归\n",
    "https://www.cnblogs.com/pinard/p/6023000.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn import linear_model\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 1  2  3  4  5  6  7  8  9 10]\n",
      "[[0]\n",
      " [1]\n",
      " [2]\n",
      " [3]\n",
      " [4]\n",
      " [5]\n",
      " [6]\n",
      " [7]\n",
      " [8]\n",
      " [9]]\n"
     ]
    }
   ],
   "source": [
    "print np.arange(1, 11)\n",
    "print np.arange(0, 10)[:, np.newaxis]   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 1  2  3  4  5  6  7  8  9 10]\n",
      " [ 2  3  4  5  6  7  8  9 10 11]\n",
      " [ 3  4  5  6  7  8  9 10 11 12]\n",
      " [ 4  5  6  7  8  9 10 11 12 13]\n",
      " [ 5  6  7  8  9 10 11 12 13 14]\n",
      " [ 6  7  8  9 10 11 12 13 14 15]\n",
      " [ 7  8  9 10 11 12 13 14 15 16]\n",
      " [ 8  9 10 11 12 13 14 15 16 17]\n",
      " [ 9 10 11 12 13 14 15 16 17 18]\n",
      " [10 11 12 13 14 15 16 17 18 19]]\n"
     ]
    }
   ],
   "source": [
    "print np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# X is a 10x10 matrix\n",
    "X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])\n",
    "# y is a 10 x 1 vector\n",
    "y = np.ones(10)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[  1.00000000e-10   1.09698580e-10   1.20337784e-10   1.32008840e-10\n",
      "   1.44811823e-10   1.58856513e-10   1.74263339e-10   1.91164408e-10\n",
      "   2.09704640e-10   2.30043012e-10   2.52353917e-10   2.76828663e-10\n",
      "   3.03677112e-10   3.33129479e-10   3.65438307e-10   4.00880633e-10\n",
      "   4.39760361e-10   4.82410870e-10   5.29197874e-10   5.80522552e-10\n",
      "   6.36824994e-10   6.98587975e-10   7.66341087e-10   8.40665289e-10\n",
      "   9.22197882e-10   1.01163798e-09   1.10975250e-09   1.21738273e-09\n",
      "   1.33545156e-09   1.46497140e-09   1.60705282e-09   1.76291412e-09\n",
      "   1.93389175e-09   2.12145178e-09   2.32720248e-09   2.55290807e-09\n",
      "   2.80050389e-09   3.07211300e-09   3.37006433e-09   3.69691271e-09\n",
      "   4.05546074e-09   4.44878283e-09   4.88025158e-09   5.35356668e-09\n",
      "   5.87278661e-09   6.44236351e-09   7.06718127e-09   7.75259749e-09\n",
      "   8.50448934e-09   9.32930403e-09   1.02341140e-08   1.12266777e-08\n",
      "   1.23155060e-08   1.35099352e-08   1.48202071e-08   1.62575567e-08\n",
      "   1.78343088e-08   1.95639834e-08   2.14614120e-08   2.35428641e-08\n",
      "   2.58261876e-08   2.83309610e-08   3.10786619e-08   3.40928507e-08\n",
      "   3.73993730e-08   4.10265811e-08   4.50055768e-08   4.93704785e-08\n",
      "   5.41587138e-08   5.94113398e-08   6.51733960e-08   7.14942899e-08\n",
      "   7.84282206e-08   8.60346442e-08   9.43787828e-08   1.03532184e-07\n",
      "   1.13573336e-07   1.24588336e-07   1.36671636e-07   1.49926843e-07\n",
      "   1.64467618e-07   1.80418641e-07   1.97916687e-07   2.17111795e-07\n",
      "   2.38168555e-07   2.61267523e-07   2.86606762e-07   3.14403547e-07\n",
      "   3.44896226e-07   3.78346262e-07   4.15040476e-07   4.55293507e-07\n",
      "   4.99450512e-07   5.47890118e-07   6.01027678e-07   6.59318827e-07\n",
      "   7.23263390e-07   7.93409667e-07   8.70359136e-07   9.54771611e-07\n",
      "   1.04737090e-06   1.14895100e-06   1.26038293e-06   1.38262217e-06\n",
      "   1.51671689e-06   1.66381689e-06   1.82518349e-06   2.00220037e-06\n",
      "   2.19638537e-06   2.40940356e-06   2.64308149e-06   2.89942285e-06\n",
      "   3.18062569e-06   3.48910121e-06   3.82749448e-06   4.19870708e-06\n",
      "   4.60592204e-06   5.05263107e-06   5.54266452e-06   6.08022426e-06\n",
      "   6.66991966e-06   7.31680714e-06   8.02643352e-06   8.80488358e-06\n",
      "   9.65883224e-06   1.05956018e-05   1.16232247e-05   1.27505124e-05\n",
      "   1.39871310e-05   1.53436841e-05   1.68318035e-05   1.84642494e-05\n",
      "   2.02550194e-05   2.22194686e-05   2.43744415e-05   2.67384162e-05\n",
      "   2.93316628e-05   3.21764175e-05   3.52970730e-05   3.87203878e-05\n",
      "   4.24757155e-05   4.65952567e-05   5.11143348e-05   5.60716994e-05\n",
      "   6.15098579e-05   6.74754405e-05   7.40196000e-05   8.11984499e-05\n",
      "   8.90735464e-05   9.77124154e-05   1.07189132e-04   1.17584955e-04\n",
      "   1.28989026e-04   1.41499130e-04   1.55222536e-04   1.70276917e-04\n",
      "   1.86791360e-04   2.04907469e-04   2.24780583e-04   2.46581108e-04\n",
      "   2.70495973e-04   2.96730241e-04   3.25508860e-04   3.57078596e-04\n",
      "   3.91710149e-04   4.29700470e-04   4.71375313e-04   5.17092024e-04\n",
      "   5.67242607e-04   6.22257084e-04   6.82607183e-04   7.48810386e-04\n",
      "   8.21434358e-04   9.01101825e-04   9.88495905e-04   1.08436597e-03\n",
      "   1.18953407e-03   1.30490198e-03   1.43145894e-03   1.57029012e-03\n",
      "   1.72258597e-03   1.88965234e-03   2.07292178e-03   2.27396575e-03\n",
      "   2.49450814e-03   2.73644000e-03   3.00183581e-03   3.29297126e-03\n",
      "   3.61234270e-03   3.96268864e-03   4.34701316e-03   4.76861170e-03\n",
      "   5.23109931e-03   5.73844165e-03   6.29498899e-03   6.90551352e-03\n",
      "   7.57525026e-03   8.30994195e-03   9.11588830e-03   1.00000000e-02]\n"
     ]
    }
   ],
   "source": [
    "n_alphas = 200\n",
    "# alphas count is 200, 都在10的-10次方和10的-2次方之间\n",
    "alphas = np.logspace(-10, -2, n_alphas)\n",
    "print alphas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "clf = linear_model.Ridge(fit_intercept=False)\n",
    "coefs = []\n",
    "# 循环200次\n",
    "for a in alphas:\n",
    "    #设置本次循环的超参数\n",
    "    clf.set_params(alpha=a)\n",
    "    #针对每个alpha做ridge回归\n",
    "    clf.fit(X, y)\n",
    "    # 把每一个超参数alpha对应的theta存下来\n",
    "    coefs.append(clf.coef_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11f7f070>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = plt.gca()\n",
    "\n",
    "ax.plot(alphas, coefs)\n",
    "#将alpha的值取对数便于画图\n",
    "ax.set_xscale('log')\n",
    "#翻转x轴的大小方向，让alpha从大到小显示\n",
    "ax.set_xlim(ax.get_xlim()[::-1]) \n",
    "plt.xlabel('alpha')\n",
    "plt.ylabel('weights')\n",
    "plt.title('Ridge coefficients as a function of the regularization')\n",
    "plt.axis('tight')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
